using System;
using System.Collections.Generic;
using NHibernate.Criterion;
using Neturion.Dados;
using Neturion.IRepositorios;
using NHibernate;

namespace Neturion.Repositorios
{
    public class RepositorioMotivoSituacaoCheque : IRepositorioMotivoSituacaoCheque
    {
        public MotivoSituacaoCheque Inserir(MotivoSituacaoCheque motivoSituacaoCheque)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Save(motivoSituacaoCheque);
            return motivoSituacaoCheque;
        }

        public MotivoSituacaoCheque Atualizar(MotivoSituacaoCheque motivoSituacaoCheque)
        {
            MotivoSituacaoCheque motivoSituacaoChequeTmp = ObterPorId(motivoSituacaoCheque.MotivoSituacaoChequeId);

            motivoSituacaoChequeTmp.Codigo = motivoSituacaoCheque.Codigo;
            motivoSituacaoChequeTmp.Descricao = motivoSituacaoCheque.Descricao;
            motivoSituacaoChequeTmp.EnumClassificaoMotivoSituacaoCheque =
                motivoSituacaoCheque.EnumClassificaoMotivoSituacaoCheque;
            motivoSituacaoChequeTmp.FimVigencia = motivoSituacaoCheque.FimVigencia;
            motivoSituacaoChequeTmp.InicioVigencia = motivoSituacaoCheque.InicioVigencia;
            
            GerenciadorBDConfigs.Instance.SessaoAtual().Merge(motivoSituacaoChequeTmp);
            return motivoSituacaoChequeTmp;
        }

        public void Excluir(MotivoSituacaoCheque motivoSituacaoCheque)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Delete(motivoSituacaoCheque);
        }

        public IList<MotivoSituacaoCheque> ObterTodos()
        {
            ICriteria criteria = GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof(MotivoSituacaoCheque));
            return criteria.List<MotivoSituacaoCheque>() as List<MotivoSituacaoCheque>;
        }

        public MotivoSituacaoCheque ObterPorId(int id)
        {
            return GerenciadorBDConfigs.Instance.SessaoAtual().Get<MotivoSituacaoCheque>(id);
        }

        public IList<MotivoSituacaoCheque> ObterTodos(int inicio, int quantidade, int quantidadeMinima, string codigo, string descricao)
        {
            if (quantidade.Equals(0))
            {
                quantidade = quantidadeMinima;
            }

            ICriteria criteria = GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof(MotivoSituacaoCheque))
               .SetFirstResult(inicio).SetMaxResults(quantidade);

            if (!string.IsNullOrEmpty(codigo))
            {
                criteria.Add(Restrictions.Eq("Codigo", codigo));
            }

            if (!string.IsNullOrEmpty(descricao))
            {
                criteria.Add(Restrictions.Like("Descricao", descricao, MatchMode.Anywhere));
            }

            return criteria.List<MotivoSituacaoCheque>() as List<MotivoSituacaoCheque>;
        }
    }
}